C++函数模板 class 和 typename 的区别 |
您所在的位置:网站首页 › template class和typename › C++函数模板 class 和 typename 的区别 |
先看如下代码 template void mySwap(T &a, T &b) { T tmp = a; a = b; b = tmp; } int a = 10; int b = 20; mySwap(a, b);以上代码可以直接编译通过,那么此时将class 改为typename,如下 template void mySwap(T &a, T &b) { T tmp = a; a = b; b = tmp; } int a = 10; int b = 20; mySwap(a, b);以上代码在编译的时候,就编译不通过了,原因是typename定义的模板必须明确指定类型,如下 int a = 10; int b = 20; //2 显示指定类型 mySwap(a, b);在mySwap加上就可以编译通过了,表示让编译器在编译时,将T转化为中的类型. 通过对比,我们很容易就能发现class 和 typename的区别了. class 修饰的模板在编译时,不需要mySwap()指定类型,编译会根据传入的参数,自动将T,替换为该类型 typename 修饰的模板在编译时,需要明确指定mySwap()的参数类型,如果不指定,编译器就会报错。 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |